// 实时相加
export function addCommon(common: [{ count: any, index: any }], count: any, index: any) {
    count = Number(count);
    let total = 0.0;
    common.push({index: index, count: count})

    for (let i = 0; i < common.length; i++) {
        if (index === common[i].index) {

            if (index !== common.length) {
                for (let j = i + 1; j < common.length; j++) {
                    if (index === common[j].index) {
                        common[i].count = count
                        common.splice(j, 1)
                    }
                }
            }
        }
    }
    total = ListItemAdd(common)
    if (isNaN(total)) {
        return -1;
    }
    return total
}

// 列表
function ListItemAdd(list: [{ count: any, index: any }]) {
    let total = 0
    list.forEach(item => {
        total = ItemAdd(item.count, total)
    })
    return total;
}

// 相加精度问题
export function ItemAdd(a: any, b: any) {
    return (a * 10 * 10 * 10 * 10 * 10 + b * 10 * 10 * 10 * 10 * 10) / (10 * 10 * 10 * 10 * 10)
}



/**
 *   递归
 *
 *   判断对象中必要字段是否为空
 *   foreach不能使用return或者break终止，所以使用第三方变量协助判断
 */

/**
 *  其中为了解决count值在请求时唯一的问题，选择将其封装成类
 *  类中有一个属性count以及加减的方法
 *  其余思路保持不变
 */
class ListObject {
    private count = 0

    public add() {
        this.count += 1
    }

    public subtract() {
        this.count -= 1
    }

    public get() {
        return this.count
    }

    // // 开启
    // public startIfNullObject() {
    //     return ifNullToObject(object)
    // }
}

// 判断属性是否为对象
function ifObject(obj: unknown) {
    return Object.prototype.toString.call(obj) === ('[object Object]' || 'object')
}

// 判断对象中是否有属性为空
function ifNullObject(object: any, listObject: ListObject) {

    if (object === "" || object === 0) {
        listObject.add()
    }
    // 判断数组是否为空
    if (object instanceof Array) {
        if (object.length === 0) {
            listObject.add()
        }
        for (let i = 0; i < object.length; i++) {
            for (const item in object[i]) {
                if (object[i][item] === "" || object[i][item] == 0) {
                    listObject.add()
                }
                // 某些字段并不要求必须 排除
                if (item === 'specifications' && object[i][item] == "") {
                    listObject.subtract()
                }
            }
        }
    }
    if (ifObject(object)) {
        for (const item in object) {
            // 某些字段并不要求必须 排除
            if (item === 'remarks' && object[item] == "") {
                listObject.subtract()
            }
            ifNullObject(object[item], listObject)
        }
        return listObject.get()
    }
}

export function ifNullToObject(object: any) {
    // 创建类
    const listObject = new ListObject();
    return ifNullObject(object, listObject) === 0
}





